package com.lagou.edu.ad.controller;

import com.lagou.edu.ad.api.dto.PromotionAdDTO;
import com.lagou.edu.ad.api.dto.PromotionSpaceDTO;
import com.lagou.edu.ad.remote.AdService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 广告controller
 *
 * @autor lm
 * @since 2021/10/2315:08
 */
@RestController
@RequestMapping("/ad")
public class AdController {
    @Autowired
    private AdService adService;

    /**
     * 获取所有广告位
     *
     * @return 广告位
     */
    @GetMapping("/space/getAllSpaces")
    List<PromotionSpaceDTO> getAllSpaces() {
        return adService.getAllSpaces();
    }

    /**
     * 根据spaceKey获取广告位及其广告
     *
     * @param spaceKeys
     * @return
     */
    @GetMapping("/space/getSpaceAndAd")
    List<PromotionSpaceDTO> getSpaceAndAd(@RequestParam(name = "spaceKeys") String[] spaceKeys) {
        return adService.getSpaceAndAd(spaceKeys);
    }

    /**
     * 根据ID获取广告位
     *
     * @param id ID
     * @return 广告位
     */
    @GetMapping("/space/getSpaceById")
    PromotionSpaceDTO getSpaceById(@RequestParam(name = "id") Integer id) {
        return adService.getSpaceById(id);
    }

    /**
     * 保存广告位
     *
     * @param promotionSpaceDTO 广告位模型
     */
    @PostMapping("/space/saveOrUpdateSpace")
    Boolean saveOrUpdateSpace(@RequestBody PromotionSpaceDTO promotionSpaceDTO) {
        return adService.saveOrUpdateSpace(promotionSpaceDTO);
    }

    /**
     * 根据ID获取广告
     *
     * @param id 广告ID
     * @return 广告
     */
    @GetMapping("/getAdById")
    PromotionAdDTO getAdById(@RequestParam(name = "id") Integer id) {
        return adService.getAdById(id);
    }

    /**
     * 获取所有广告列表
     *
     * @return 广告列表
     */
    @GetMapping("/getAdList")
    List<PromotionAdDTO> getAdList() {
        return adService.getAdList();
    }

    /**
     * 保存或更新广告
     *
     * @param promotionAdDTO 广告实体
     * @return 更新结果
     */
    @PostMapping("/saveOrUpdateAd")
    Boolean saveOrUpdateAd(@RequestBody PromotionAdDTO promotionAdDTO) {
        return adService.saveOrUpdateAd(promotionAdDTO);
    }

    /**
     * 更新广告装填
     *
     * @param id 广告ID
     * @param status 状态
     * @return 更新结果
     */
    @GetMapping("updateStatus")
    Boolean updateStatus(@RequestParam(name = "id") Integer id, @RequestParam(name = "status") Integer status) {
        return adService.updateStatus(id, status);
    }
}
